"""Definition of the Programa content type
"""

from AccessControl import ClassSecurityInfo

from zope.interface import implements, directlyProvides

from Products.Archetypes import atapi
from Products.ATContentTypes.content import base
from Products.ATContentTypes.content import schemata
from Products.Archetypes import utils

from guegue.alcaldias import alcaldiasMessageFactory as _
from guegue.alcaldias.interfaces import IPrograma
from guegue.alcaldias.config import PROJECTNAME

ProgramaSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((

    # -*- Your Archetypes field definitions here ... -*-
    atapi.StringField('title',
                searchable=1,
                isMetadata=0,
                accessor='Title',
                widget=atapi.StringWidget(label='Título',
                                      maxlength=150,
                                      size=30,
                                      label_msgid="label_entry_title",
                                      description_msgid="help_entry_title",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('description',
                searchable=1,
                isMetadata=0,
                accessor='Description',
                widget=atapi.TextAreaWidget(label='Breve descripción',
                                      label_msgid="label_entry_description",
                                      description_msgid="help_entry_description",
                                      i18n_domain="guegue.alcaldias",
                                      description='Entre una breve descripción del programa.')),
    atapi.ImageField('image',
              searchable=0,
              required=0,
              sizes= {'large'   : (768, 768),
                'preview' : (400, 400),
                'mini'    : (200, 200),
                'thumb'   : (128, 128),
                'tile'    :  (64, 64),
                'icon'    :  (32, 32),
                'listing' :  (16, 16),
               },
              widget=atapi.ImageWidget(label='Imagen',
                                label_msgid="label_entry_image",
                                description_msgid="help_entry_image",
                                i18n_domain="guegue.alcaldias",
                                threshold=102400,
                                description='Imagen relacionada al programa')),
    atapi.TextField('objetivo',
                searchable=1,
                isMetadata=0,
                default_content_type='text/html',
                default_output_type='text/html',
                allowable_content_types=('text/plain','text/structured', 'text/html', 'text/restructured'),
                widget=atapi.RichWidget(label='Objetivos',
                                      label_msgid="label_entry_objetivo",
                                      description_msgid="help_entry_objetivo",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.DateTimeField('fecha',
                searchable=0,
                required=0,
                widget=atapi.CalendarWidget(label='Fecha de Inicio',
                                      label_msgid="label_entry_fecha",
                                      show_hm = False,
                                      description_msgid="help_entry_fecha",
                                      i18n_domain="guegue.alcaldias",
                                      description='Fecha de inicio del programa')),
    atapi.DateTimeField('fechafin',
                searchable=0,
                required=0,
                widget=atapi.CalendarWidget(label='Fecha de Finalización',
                                      label_msgid="label_entry_fechafin",
                                      show_hm = False,
                                      description_msgid="help_entry_fechafin",
                                      i18n_domain="guegue.alcaldias",
                                      description='Fecha de finalizacion del programa')),
    atapi.TextField('logros',
                searchable=1,
                isMetadata=0,
                default_content_type='text/html',
                default_output_type='text/html',
                allowable_content_types=('text/plain','text/structured', 'text/html', 'text/restructured'),
                widget=atapi.RichWidget(label='Logros Alcanzados/Metas cumplidas',
                                      label_msgid="label_entry_logros",
                                      description_msgid="help_entry_logros",
                                      i18n_domain="guegue.alcaldias",
                                      description='Entres los logros alcanzados en el programa.')),
    atapi.StringField('dependencia',
                searchable=1,
                isMetadata=0,
                vocabulary="getDependencias",
                widget=atapi.SelectionWidget(label='Dependencia',
                                      label_msgid="label_entry_dependencia",
                                      description_msgid="help_entry_dependencia",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('otras',
                searchable=1,
                isMetadata=0,
                widget=atapi.StringWidget(label='Otras Instituciones Involucradas',
                                      maxlength=300,
                                      size=60,
                                      label_msgid="label_entry_otras",
                                      description_msgid="help_entry_otras",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.TextField('comite',
                searchable=1,
                isMetadata=0,
                default_content_type='text/html',
                default_output_type='text/html',
                allowable_content_types=('text/plain','text/structured', 'text/html', 'text/restructured'),
                widget=atapi.RichWidget(label='Personas que conforman el Comité Técnico',
                                      label_msgid="label_entry_comite",
                                      description_msgid="help_entry_comite",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('monto',
              searchable=0,
              required=0,
              widget=atapi.StringWidget(label='Presupuesto',
                                      label_msgid="label_entry_monto",
                                      description_msgid="help_entry_monto",
                                      i18n_domain="guegue.alcaldias",
                                      description='Indicar en este cuadro el Monto Total al cual asciende el valor del presupuesto del Programa. Ej. 1,000,000.00')),
    atapi.StringField('moneda',
                searchable=1,
                isMetadata=0,
                vocabulary=['Córdobas','Dólares','Euros'],
                widget=atapi.SelectionWidget(label='Moneda: ',
                        label_msgid='label_entry_moneda',
                        description_msgid='help_entry_moneda',
                        i18n_domain='guegue.alcaldias',
                        description='')),
    atapi.StringField('fuentes',
                searchable=1,
                isMetadata=0,
                widget=atapi.StringWidget(label='Fuentes de Financiamiento',
                                      maxlength=300,
                                      size=60,
                                      label_msgid="label_entry_fuentes",
                                      description_msgid="help_entry_fuentes",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.TextField('contacto',
                searchable=1,
                isMetadata=0,
                default_content_type='text/html',
                default_output_type='text/html',
                allowable_content_types=('text/plain','text/structured', 'text/html', 'text/restructured'),                     
                widget=atapi.RichWidget(label='Datos de Contacto',
                                      label_msgid="label_entry_contacto",
                                      description_msgid="help_entry_contacto",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.TextField('body',
              searchable=1,
              required=0,
              primary=1,
              default_content_type='text/html',
              default_output_type='text/html',
              allowable_content_types=('text/plain','text/structured', 'text/html', 'text/restructured'),
              widget=atapi.RichWidget(label='Más Detalles sobre el Programa',
                                label_msgid="label_entry_body",
                                description_msgid="help_entry_body",
                                i18n_domain="guegue.alcaldias",
                                description="Puede entrar el texto del programa completo.")),
    atapi.FileField('adjunto',
              searchable=0,
              required=0,
              widget=atapi.FileWidget(label='Archivo adjunto',
                                label_msgid="label_entry_adjunto",
                                description_msgid="help_entry_adjunto",
                                i18n_domain="guegue.alcaldias",
                                description='Puede adjuntar un archivo con el programa completo.')),
))

# Set storage on fields copied from ATContentTypeSchema, making sure
# they work well with the python bridge properties.

schemata.finalizeATCTSchema(ProgramaSchema, moveDiscussion=False)

class Programa(base.ATCTContent):
    """Tipo de datos para programas"""
    implements(IPrograma)

    def getDependencias(self):
        dl = utils.DisplayList()
        linklist = self.portal_catalog.searchResults(portal_type='Dependencia')
        for link in linklist:
            dl.add(link['id'], link['Title'])
        return dl

    portal_type = "Programa"
    schema = ProgramaSchema

    #title = atapi.ATFieldProperty('title')
    #description = atapi.ATFieldProperty('description')

atapi.registerType(Programa, PROJECTNAME)
